/**
 * @Title: VerifyCodeGenerateUtil.java
 * @Package com.ninelephas.whale.util
 * @Description: 生成图片验证码
 * @author 杨智刚
 * @date 2017年1月17日 下午3:35:58
 * @version V1.0
 */
package com.warrior.util;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Random;

/**
 * @ClassName: VerifyCodeGenerateUtil
 * @Description: 生成图片验证码
 * @author 杨智刚
 *
 */
public class VerifyCodeGenerateUtil {

    /**
     * 
    * @Title: generatePicCode 
    * @Description: 生成验证码
    * @param @param image
    * @param @return    设定文件 
    * @return Graphics    返回类型 
    * @author 杨智刚
    * @throws
     */
    public Graphics generatePicCode(BufferedImage image) {

        int width = image.getWidth();
        int height = image.getHeight();
        // 获取图形上下文
        Graphics g = image.getGraphics();

        // 生成随机类
        Random random = new Random();

        // 设定背景色
        g.setColor(getRandColor(200, 250));
        g.fillRect(0, 0, width, height);

        // 设定字体
        g.setFont(new Font("Times New Roman", Font.PLAIN, 20));


        // 画边框
        g.setColor(new Color(80, 80, 80));
        g.drawRect(0, 0, width - 1, height - 1);

        // 随机产生155条干扰线，使图象中的认证码不易被其它程序探测到
        g.setColor(getRandColor(160, 200));
        for (int i = 0; i < 255; i++) {
            int x = random.nextInt(width);
            int y = random.nextInt(height);
            int xl = random.nextInt(12);
            int yl = random.nextInt(12);
            g.drawLine(x, y, x + xl, y + yl);
        }
        return g;
    }

    private Color getRandColor(int fc, int bc) {// 给定范围获得随机颜色
        Random random = new Random();
        int fc1 = fc > 255 ? 255 : fc;
        int bc1 = bc > 255 ? 255 : bc;
        int r = fc1 + random.nextInt(bc1 - fc1);
        int g = fc1 + random.nextInt(bc1 - fc1);
        int b = fc1 + random.nextInt(bc1 - fc1);
        return new Color(r, g, b);
    }
}
